package com.sbc.idempotent.config;

import com.sbc.idempotent.core.IdempotentAspect;
import com.sbc.idempotent.core.spel.IdempotentSpELByRestAPIExecuteHandler;
import com.sbc.idempotent.core.spel.IdempotentSpELService;
import org.redisson.api.RedissonClient;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

/**
 * @description: 幂等自动装配
 * @author: songbaicheng
 * @create: 2024-05-09 10:35
 **/
@EnableConfigurationProperties(IdempotentProperties.class)
public class IdempotentAutoConfiguration {

    /**
     * 幂等切面
     */
    @Bean
    public IdempotentAspect idempotentAspect() {
        return new IdempotentAspect();
    }

    /**
     * SpEL 方式幂等实现，基于 RestAPI 场景
     */
    @Bean
    @ConditionalOnMissingBean // 只有当 Spring 应用程序上下文中不存在指定类型的 Bean 时才创建，可避免冲突。
    public IdempotentSpELService idempotentSpELByRestAPIExecuteHandler(RedissonClient redissonClient) {
        return new IdempotentSpELByRestAPIExecuteHandler(redissonClient);
    }
}
